import cv2
import numpy as np


def show(img):
    cv2.imshow('Detected Dots', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


# 读取图像
image_original = cv2.imread(r"D:\Project\binocularCamera\data\output_0720\output_719\left_camera.png")

image = cv2.cvtColor(image_original, cv2.COLOR_BGR2GRAY)

# 霍夫圆变换检测圆圈
circles = cv2.HoughCircles(
    image,
    cv2.HOUGH_GRADIENT,  # 使用霍夫梯度方法
    dp=1,                # 反霍夫变换的分辨率，1表示与输入图像的分辨率相同
    minDist=20,          # 检测到的圆圈之间的最小距离
    param1=50,           # Canny边缘检测的高阈值
    param2=30,           # 霍夫变换的累加器阈值，越小检测到的圆圈越多，越大检测到的圆圈越少
    minRadius=10,       # 圆圈的最小半径
    maxRadius=100        # 圆圈的最大半径
)

# 如果检测到了圆圈
if circles is not None:
    circles = np.uint16(np.around(circles))  # 将圆圈坐标和半径转换为整数
    for circle in circles[0, :]:
        # 绘制圆圈
        center = (circle[0], circle[1])  # 圆心坐标
        radius = circle[2]              # 圆圈半径
        cv2.circle(image_original, center, radius, (0, 255, 0), 2)  # 绘制圆圈轮廓
        cv2.circle(image_original, center, 2, (0, 0, 255), 3)        # 绘制圆心

# 显示结果图像
cv2.imshow('Detected Circles', image_original)
cv2.waitKey(0)
cv2.destroyAllWindows()